package com.base.test.mutual.aspect;

import com.alibaba.fastjson.JSONObject;
import com.base.test.mutual.annotation.BscToken;
import com.base.test.mutual.redis.BscTokenRedis;
import com.base.test.mutual.utils.BSCHttpUtils;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;

@Slf4j
public class BscTokenAspect {

    @Autowired
    private BscTokenRedis bscTokenRedis;

    @Autowired
    private BSCHttpUtils bSCHttpUtils;

    @Pointcut("@annotation(bscToken)")
    public void annotationPointcut(BscToken bscToken){}

    @Around("annotationPointcut(bscToken)")
    public Object around(ProceedingJoinPoint pjp, BscToken bscToken) throws Throwable {
        //获取请求方法
        Signature sig = pjp.getSignature();
        String method = pjp.getTarget().getClass().getName() + "." + sig.getName();

        //获取请求的参数
        Object[] args = pjp.getArgs();
        //fastjson转换
        String params = JSONObject.toJSONString(args);
//        BscJwtToken  token= bscTokenRedis.get();
//        if(token==null){
//            token= bSCHttpUtils.generateToken();
//            bscTokenRedis.set(token);
//        }
//        if(token!=null&&bSCHttpUtils.isTokenExpired(token.getExpiration())){
//            token= bSCHttpUtils.generateToken();
//            bscTokenRedis.set(token);
//        }
        //打印请求参数
        log.info("参数:" + method + ":" + params);

        //执行方法
        Object result = pjp.proceed();

        //打印返回结果
        log.info("返回结果:" + method + ":" + result);
        return result;
    }
}